package fr.exil.proto.quest.perso.codex.page;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import fr.exil.proto.quest.generator.quete.Quete;
import fr.exil.proto.quest.generator.quete.Quete.Classe;

public class PageQuetes {
    // Attributs
    private List<Quete> touteLesQuetes, quetes1, quetes2, quetes3;
    
    // Constructeur
    public PageQuetes() {
	touteLesQuetes = new LinkedList<Quete>(); 
    	quetes1        = new LinkedList<Quete>();
    	quetes2        = new LinkedList<Quete>();
    	quetes3        = new LinkedList<Quete>();
    }
    
    // Methods
    public void afficher() {
	List<Iterator<Quete>> it = new ArrayList<Iterator<Quete>>();
	it.add(quetes1.iterator());
	it.add(quetes2.iterator());
	it.add(quetes3.iterator());
	
	for (int i = 0; i < it.size(); i++) {
	    System.out.println("Quêtes de classe " + i + 1  + " :");
	    while (it.get(i).hasNext()) {
		Quete quete = (Quete) it.get(i).next();
		System.out.println(quete.getId() + " - " + quete.getNom());
	    }
	}
	
	
    }
    
    public void addQuete(Quete quete) {
	Classe classe = quete.getClasse();
	
	touteLesQuetes.add(quete);
	
	switch (classe) {
	case CLASSE_1:
	    quetes1.add(quete);
	    break;

	case CLASSE_2 :
	    quetes2.add(quete);
	    break;
	    
	case CLASSE_3 :
	    quetes3.add(quete);
	    break;
	}
    }
    
    public void removeQuete(int idQuete) {
	Quete quete = findID(idQuete);
	
	touteLesQuetes.remove(quete);
	
	switch (quete.getClasse()) {
	case CLASSE_1:
	    quetes1.remove(quete);
	    break;
	    
	case CLASSE_2 :
	    quetes2.remove(quete);
	    break;
	    
	case CLASSE_3 :
	    quetes3.remove(quete);
	    break;
	}
    }
    
	private Quete findID(int IdQuete) {
	Quete retour = null;
	Iterator<Quete> it = touteLesQuetes.iterator();
	
	while (it.hasNext()) {
	    Quete quete = (Quete) it.next();
	    if (quete.getId() == IdQuete) {
		retour = quete;
	    }
	}
	
	return retour;
    }
    
    // Getters et Setters
    public List<Quete> getTouteLesQuetes() {return touteLesQuetes;}
    
    public List<Quete> getQuetes1() {return quetes1;}
    
    public List<Quete> getQuetes2() {return quetes2;}
    
    public List<Quete> getQuetes3() {return quetes3;}
}
